package cang.string.Day03.warp;

import oo.Day09.Inter;

public class WarpClass {
    public static void main(String[] args) {
        /**
         * 包装类型
         */
        int n = 5;  //基本类型
        //Java自动的讲int类型的8，包装为Integer类型的对象
        Integer x = 8;  //包装类型
        //上述代码相当于
        Integer y = Integer.valueOf(8);
        System.out.println(y);

        Double d = 3.5; //double包装类型
        //上述代码相当于
        Double dx = Double.valueOf(3.5);
        System.out.println(dx);

        //自动拆包；自动的将包装类型转换为  基本类型
        int a = x;
        a = x.intValue();//与上述代码一样
        double b = d;
        b = d.intValue();//与上述代码一样

        /*
        包装类型：是对象，可以有面向对象的三大特征（封装、继承、多态）
                    但性能慢
        基本类型：不能对象，不能 封装、继承、多态，性能好
         */
        long t1 = System.currentTimeMillis();
        int sum = 0;
        for (int i=0;i<500000;i++){
            sum+= i;
        }

        long t2 = System.currentTimeMillis();
        Integer sumI = 0;
        for (int i=0;i<500000;i++){
            sumI+= i;
        }

        long t3 = System.currentTimeMillis();
        System.out.println(t2-t1);
        System.out.println(t3-t2);

        /**
         * 包装类型，利用常量池服用了-128-127之间的整数
         * 为了优化性能
         * -128~127之间的Integer类型对象被替换同一个对象
         */
        Integer i1= 20;
        Integer i2 = 20;
        System.out.println(i1==i2); //true
        i1 = 128;
        i2 = 128;
        System.out.println(i1 == i2);

        /*
        包装类型提供常用的API
        -提供了数据类型的最大最小值常量
         */
        int max = Integer.MAX_VALUE;
        int min = Integer.MIN_VALUE;
        long lmax = Integer.MAX_VALUE;
        long lmin = Integer.MIN_VALUE;
        System.out.println(max);
        System.out.println(min);
        System.out.println(lmax);
        System.out.println(lmin);

        String str = "123.4";//10禁止字符串转换
        int num = Integer.parseInt(str);
        String strl = "1234.12";
        Double numl = Double.parseDouble(strl);
        System.out.println(num);
        System.out.println(numl);
    }
}
